package Rbac.view;

import LMR.rbac.dto.Roledto;
import LMR.rbac.service.Roleservice;
import LMR.rbac.vo.RoleVo;
import LMR.rbac.vo.Result;

public class Roleview {
    public static RoleVo[] cache;


    public static void show() {
        String menuChoice;
        do {
            printMenu();
            menuChoice = LMR.rbac.view.Mainview.input.nextLine();
            switch (menuChoice) {

                case "0":
                    System.out.println("已返回上一级菜单！");
                    break;
                case "1":
                    list();
                    break;
                case "2":
                    create();
                    break;
                case "3":
                    update();
                    break;
                case "4":
                    delete();
                    break;
                default:
                    System.out.println("输入非法，请输入正确的菜单编号！");
            }
        } while (!"0".equals(menuChoice));
    }


    public static void printMenu() {
        String menu = """
                ---------------
                    角色管理
                ---------------
                |  0  返回上级  |
                |  1  角色列表  |
                |  2  创建角色  |
                |  3  更新角色  |
                |  4  删除角色  |
                ---------------
                请输入选项：""";

        System.out.print(menu);


    }
    public static void printError(String message) {
        System.out.println("\033[31m"+message+"\033[0m");
    }
    public static void list(){
        Result result= Roleservice.list();
        cache=(RoleVo[]) result.data;
        System.out.println("ID\t角色名称\t角色数据访问范围");
        for (RoleVo role : cache){
            System.out.printf("%d\t%s\t%s\n",role.id,role.name,role.dataScope);
        }
    }
    public static void create(){
        System.out.print("请输入角色名称：");
        String name= LMR.rbac.view.Mainview.input.nextLine();
        System.out.print("请输入角色数据访问范围：输入的值为【个人，部门，全局】");
        String dataScope=null;
        do {
            String str= LMR.rbac.view.Mainview.input.nextLine();
            if("个人".equals(str)||"部门".equals(str)||"全局".equals(str)){
                dataScope=str;
            }else {
                printError("输入非法，请输入正确的角色数据访问范围");
            }
        }while (dataScope==null);
        Roledto dto=new Roledto(name,dataScope);
        Result result= Roleservice.create(dto);
        if (!result.success){
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();
    }
    public static void update(){
        RoleVo role=getCachceById();
        if (role==null){
            return;
        }
        System.out.print("请输入角色名称：按回车不修改:");
        String name= LMR.rbac.view.Mainview.input.nextLine();
        name="".equals(name)?role.name:name;
        System.out.print("请输入角色数据访问范围：输入的值为【个人，部门，全局】按回车不修改:");
        String dataScope=null;
        do {
            String str= LMR.rbac.view.Mainview.input.nextLine();
            if("个人".equals(str)||"部门".equals(str)||"全局".equals(str)){
                dataScope=str;
            } else if ("".equals(str)) {
                dataScope=role.dataScope;
            } else {
                printError("输入非法，请输入正确的角色数据访问范围");
            }
        }while (dataScope==null);
        Roledto dto=new Roledto(name,dataScope);
        Result result= Roleservice.update(dto,role.id);
        if (!result.success){
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();
    }
    public static void delete(){
        RoleVo role=getCachceById();
        if (role==null){
            return;
        }
        System.out.print("是否删除该数据？y/n:");
        String choice=LMR.rbac.view.Mainview.input.nextLine();
        if (!"y".equalsIgnoreCase(choice)){
            System.out.println("已取消删除！");
            return;
        }
        Result result= Roleservice.delete(role.id);
        if (!result.success){
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();
    }
    public static RoleVo getCachceById(){
        System.out.print("请输入角色ID,ID必须大于0且是整数:");
        if (!LMR.rbac.view.Mainview.input.hasNextInt()){
            LMR.rbac.view.Mainview.input.nextLine();
            printError("输入非法，请输入正确的角色ID");
            return null;
        }
        int id=Integer.parseInt(LMR.rbac.view.Mainview.input.nextLine());
        if (id<1){
            printError("输入非法，请输入正确的角色ID");
            return null;
        }
        if (cache==null){
            Result result=Roleservice.list();
            cache=(RoleVo[]) result.data;
        }
        RoleVo role=null;
        for (RoleVo roleVo:cache){
            if (roleVo.id==id){
                role=roleVo;
                System.out.println("该ID对应的数据是：");
                System.out.printf("ID：%d,名称：%s,数据访问范围：%s\n",roleVo.id,roleVo.name,roleVo.dataScope);
                break;
            }

        }
        if (role==null){
            printError("没有该ID对应的数据");
            return null;
        }
        return role;
    }
}
